import { IPSAppView } from '../view/ipsapp-view';
import { IPSNavigateParamContainer } from '../../control/ipsnavigate-param-container';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSUIAction } from '../../view/ipsuiaction';

/**
 *
 * @export
 * @interface IPSAppFunc
 */
export interface IPSAppFunc extends IPSNavigateParamContainer {
  /**
   * 应用功能类型
   * @description 值模式 [应用功能类型] {APPVIEW：打开应用视图、 OPENHTMLPAGE：打开HTML页面、 PDTAPPFUNC：预置应用功能、 UIACTION：界面行为、 JAVASCRIPT：执行JavaScript、 CUSTOM：自定义 }
   * @type {( string | 'APPVIEW' | 'OPENHTMLPAGE' | 'PDTAPPFUNC' | 'UIACTION' | 'JAVASCRIPT' | 'CUSTOM')}
   */
  appFuncType:
    | string
    | 'APPVIEW'
    | 'OPENHTMLPAGE'
    | 'PDTAPPFUNC'
    | 'UIACTION'
    | 'JAVASCRIPT'
    | 'CUSTOM';

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 功能编号
   * @type {string}
   */
  funcSN: string;

  /**
   * Html地址
   * @type {string}
   */
  htmlPageUrl: string;

  /**
   * 脚本代码
   * @type {string}
   */
  jSCode: string;

  /**
   * 名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  getNamePSLanguageRes(): IPSLanguageRes | null;

  /**
   * 功能打开模式
   * @description 值模式 [应用功能打开方式] {INDEXVIEWTAB：应用容器分页、 INDEXVIEWPOPUP：应用容器弹出、 INDEXVIEWPOPUPMODAL：应用容器弹出（模式）、 HTMLPOPUP：独立网页弹出、 TOP：顶级页面 }
   * @type {( string | 'INDEXVIEWTAB' | 'INDEXVIEWPOPUP' | 'INDEXVIEWPOPUPMODAL' | 'HTMLPOPUP' | 'TOP')}
   */
  openMode:
    | string
    | 'INDEXVIEWTAB'
    | 'INDEXVIEWPOPUP'
    | 'INDEXVIEWPOPUPMODAL'
    | 'HTMLPOPUP'
    | 'TOP';

  /**
   * 打开视图参数
   * @type {IModel}
   */
  openViewParam: IModel;

  /**
   * 打开视图
   *
   * @type {IPSAppView}
   */
  getPSAppView(): IPSAppView | null;

  /**
   * 预定义功能标识
   * @type {string}
   */
  getPSPDTAppFuncId(): string | null;

  /**
   * 应用界面行为
   *
   * @type {IPSUIAction}
   */
  getPSUIAction(): IPSUIAction | null;

  /**
   * 操作提示信息
   * @type {string}
   */
  tooltip: string;

  /**
   * 操作提示语言资源
   *
   * @type {IPSLanguageRes}
   */
  getTooltipPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 用户数据
   * @type {string}
   */
  userData: string;

  /**
   * 用户数据2
   * @type {string}
   */
  userData2: string;

  /**
   * 系统保留
   * @type {boolean}
   * @default false
   */
  systemReserved: boolean;
}
